#pragma once

#include "input.h"
#include "console.h"

#include <vector>

typedef std::vector<::Input> Inputs;

class MenuManager;
class ServiceProvider;

class Menu {
public:
	Menu(MenuManager* const menu_manager): menu_manager_(menu_manager) {}
	virtual ~Menu() {}

	virtual Menu* Input(const Inputs& input) = 0;
	virtual void Draw(Console& console) const = 0;
	virtual void OnEnter() {}
	virtual void OnExit() {}

protected:
	ServiceProvider* GetSP() const;
	MenuManager* GetMM() const {
		return menu_manager_;
	}

private:
	Menu(const Menu&);
	Menu& operator=(const Menu&);

	MenuManager* menu_manager_;
};
